package com.xbongbong.pro.sms.model.impl;

import com.xbongbong.paas.toolbox.util.CollectionsUtil;
import com.xbongbong.paas.toolbox.util.DateUtil;
import com.xbongbong.pro.sms.model.SmsStatusModel;
import com.xbongbong.saas.domain.dao.SmsStatusDao;
import com.xbongbong.saas.domain.entity.SmsStatusEntity;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @Author: hongxiao
 * @date: 2019-01-12 17:48
 */
@Service("smsStatusModel")
public class SmsStatusModelImpl implements SmsStatusModel {

    @Resource
    private SmsStatusDao smsStatusDao;

    @Override
    public Integer insert(SmsStatusEntity entity){
        long now = DateUtil.getInt();
        entity.setAddTime(now);
        entity.setUpdateTime(now);

        return smsStatusDao.insert(entity);
    }

    @Override
    public Integer update(SmsStatusEntity entity){
        entity.setUpdateTime((long)DateUtil.getInt());

        return smsStatusDao.update(entity);
    }

    @Override
    public Integer save(SmsStatusEntity entity){

        if(entity.getId() == null || entity.getId().equals(0L)) {
            return smsStatusDao.insert(entity);
        }
        return smsStatusDao.update(entity);
    }

    @Override
    public Integer deleteByKey( Long key, String corpid){
        return smsStatusDao.deleteByKey(key, corpid);
    }

    @Override
    public SmsStatusEntity getByKey( Long key,String corpid){
        return smsStatusDao.getByKey(key,corpid);
    }

    @Override
    public SmsStatusEntity getByMsgId( String  msgId ){
        Map<String ,Object> param =new HashMap<>(16);

        param.put("msgId", msgId);
        param.put("start", 0);
        param.put("pageNum", 1);

        List<SmsStatusEntity> list = findEntitys(  param);
        if(list.isEmpty()){
            return null;
        }
        return list.get(0);
    }

    @Override
    public List<SmsStatusEntity> findEntitys(Map<String ,Object>  param){
        return smsStatusDao.findEntitys(param);
    }
    @Override
    public Integer getEntitysCount(Map<String ,Object>  param){
        return smsStatusDao.getEntitysCount(param);
    }

    @Override
    public List findEntitysWithoutSub(Map<String, Object> param) {
        return null;
    }

    @Override
    public List<Map<String, Object>> getCountByStatusIn(Map<String ,Object>  param) { return smsStatusDao.getCountsByStatusIn(param); }

    @Override
    public List<SmsStatusEntity> getByIdIn(Map<String ,Object>  param) {
        return smsStatusDao.getByIdIn(param);
    }

    @Override
    public Integer insertBatch(List<SmsStatusEntity> list) {
        return smsStatusDao.insertBatch(list);
    }

    @Override
    public Integer updateBatchForStatus(Map<String ,Object> param) {
        return smsStatusDao.updateBatchForStatus(param);
    }

    @Override
    public void updateBatch(List<SmsStatusEntity> list) {
        if (CollectionsUtil.isEmpty(list)) {
            return;
        }
        smsStatusDao.updateBatch(list);
    }

    @Override
    public Integer cancelByIdIn(Map<String ,Object>  param) {
        return smsStatusDao.cancelByIdIn(param);
    }

    /**
     * 工单完成后，发送短信 评价邀请
     * @param userEntity 当前用户
     * @param type 类型，0即时发送，1定时发送
     * @param workOrder 工单实体
     * @since 3.13
     * @version 3.13
     * @author zheng.li
     * @time 2017-12-29 上午10:52:27
     * @updateTime 2017-12-29 上午10:52:27
     */
//    public void sendSmsForWorkOrder (UserEntity userEntity,WorkOrderEntity workOrder,WorkflowNodeEntity workflowNodeEntity) {
//        if(userEntity==null || workOrder==null || workflowNodeEntity==null){
//            return;
//        }
//        //实时发送
//        Integer type = 0;
//        String corpid = userEntity.getCorpid();
//        Integer workOrderTempalteId = workOrder.getTemplateId();
//        WorkOrderTemplateEntity workOrderTemplateEntity = workOrderTemplateModel.getByKey(workOrderTempalteId, corpid);
//        if(workOrderTemplateEntity==null){
//            return;
//        }
//        JSONObject scopeRuleObj = FastJsonHelper.parseObject(workOrderTemplateEntity.getScopeRule());
//        Integer inside = scopeRuleObj.getInteger("inside") == null ? Integer.valueOf(0):scopeRuleObj.getInteger("inside");
//        if(inside == 1){
//            //内部评价工单，不发送
//            return;
//        }
//        String templateName = workOrderTemplateEntity.getName();
//        String nodeUserName = workflowNodeEntity.getUserName();
//
//        Integer workOrderId = workOrder.getId();
//        String encodeId = AESUtil.AESEncode(AESUtil.DEFAULT_ENCODE_RULES, workOrderId.toString());
//        String url = ConfigConstant.appUrl+"/xbbApp/workOrder/getEvaluateItem.html?id="+encodeId+"&refType=6&inside=0&corpid="+corpid;
//        //短连接
//        String shortenUrl = UtilHelper.shortenUrl(url);
//        //内容
//        String content = "";
//        SmsTemplateEntity smsTemplate = getWorkOrderSmsTemplate(corpid);
//        if(smsTemplate==null){
//            return;
//        }
//        content = smsTemplate.getContent();
//        if(content.indexOf("{模板名称}")!=-1){
//            content=content.replaceAll("\\{模板名称\\}", "“%s”");
//        }
//        if(content.indexOf("{负责人姓名}")!=-1){
//            content=content.replaceAll("\\{负责人姓名\\}", "“%s”");
//        }
//        if(content.indexOf("{评价链接}")!=-1){
//            content=content.replaceAll("\\{评价链接\\}", "“%s”");
//        }
//        content = String.format(content,templateName,nodeUserName,shortenUrl);
//
//        String phone = workOrder.getPhone();
//        String mobile = "";
//        String sender = userEntity.getName();
//        JSONArray phoneArray = FastJsonHelper.parseArray(phone);
//        if(phoneArray.isEmpty()){
//            Integer contactId = workOrder.getContactId();
//            ContactEntity contact = contactModel.getByKey(contactId, corpid);
//            if(contact==null){
//                return;
//            }
//            phoneArray = FastJsonHelper.parseArray(contact.getPhone());
//            if(phoneArray.isEmpty()){
//                return;
//            }
//        }
//        JSONObject phoneTmp = phoneArray.getJSONObject(0);
//        mobile = phoneTmp.getString("telNum");
//
//        SmsStatusEntity smsStatusEntity = new SmsStatusEntity();
//        smsStatusEntity.setCorpid(corpid);
//        smsStatusEntity.setSender(sender);
//        smsStatusEntity.setReceiver("");
//        smsStatusEntity.setMobile(mobile);
//        smsStatusEntity.setUserId(userEntity.getUserId());
//        smsStatusEntity.setType(type);
//        smsStatusEntity.setContent(content);
//        smsStatusEntity.setStatus(0);
//        //TODO 0创蓝营销帐号，1创蓝通知帐号 用哪个？
//        smsStatusEntity.setSendApi(1);
//        if(type.equals(0)){
//            insert(smsStatusEntity);
//            Integer statusId = smsStatusEntity.getId();
//            //入队列
//            insertQueue(corpid,statusId, type, smsStatusEntity.getMobile(), content);
//        }
//    }

    /**
     * 获取工单默认短信模板
     * @param corpid
     * @return
     * @since 3.16
     * @version 3.16
     * @author zheng.li
     * @time 2018-1-15 上午10:36:54
     * @updateTime 2018-1-15 上午10:36:54
     */
//    private SmsTemplateEntity getWorkOrderSmsTemplate(String corpid){
//        //TODO 到时候是建一个默认全局工单短信模板，还是每个公司建一个工单短信模板？是否需要审核？
//        Map<String,Object> param = new HashMap<String,Object>();
//        param.put("corpid", corpid);
//        param.put("del", 0);
//        //审核通过
//        param.put("status", 2);
//        //关联模块为工单 //TODO 数据库还没加
//        param.put("refType", RedundantTemplateTypeEnum.WORKORDER.getCode());
//        param.put("start", 0);
//        param.put("pageNum", 1);
//        List<SmsTemplateEntity>  list = smsTemplateModel.findEntitys(param);
//        if(!list.isEmpty()){
//            return list.get(0);
//        }
//
//        return null;
//
//    }

    /**
     * 立即发送的短信进入消息队列
     * @param corpid
     * @param statusId
     * @param type
     * @param mobile
     * @param content
     * @author
     * @time 2017-2-24 下午8:08:24
     */
//    private void insertQueue(final String corpid,final Integer statusId,final Integer type,final String mobile,final String content){
//        executor.submit(new Runnable() {
//            @Override
//            public void run() {
//                try {
//                    JSONObject dataJson = new JSONObject();
//                    dataJson.put("statusId", statusId);
//                    dataJson.put("type", type);
//                    dataJson.put("mobile", mobile);
//                    dataJson.put("content", content);
//                    dataJson.put("corpid", corpid);
//
//                    String callbackUrl = Env.LOCAL_URL + "/sms/getMessageFromKafka.do";
//                    JSONObject kafkaMessage = new JSONObject();
//
//                    kafkaMessage.put("type", 3);// 外部type=3, 轻负载方案
//                    kafkaMessage.put("callbackUrl", callbackUrl);
//                    kafkaMessage.put("param", dataJson);
//
//                    ProducerHelper.sendJSONMessage(kafkaMessage, ConfigConstant.dingtalkPushTopic);
//                } catch (Exception e) {
//                    LOG.error("发送信息到kafka时出错", e);
//                }
//            }
//        });
//    }
}
